const TimeUtils = {
    /**
     *
     * @param {Date对象} date
     * @param {格式化字符串} fmt :如yyyy-MM-dd hh:mm:ss.S -》2006-07-02 08:09:04.423  yyyy-M-d h:m:s.S-》2006-7-2 8:9:4.18
     */
    formatDate (date, fmt) { // 格式化时间
        var o = {
            'M+': date.getMonth() + 1,
            'd+': date.getDate(),
            'h+': date.getHours(),
            'm+': date.getMinutes(),
            's+': date.getSeconds(),
            'q+': Math.floor((date.getMonth() + 3) / 3),
            'S': date.getMilliseconds()
        };
        if (/(y+)/.test(fmt)) {
            fmt = fmt.replace(RegExp.$1,
                (date.getFullYear() + '').substr(4 -
                    RegExp.$1.length));
        }
        for (var k in o) {
            if (new RegExp('(' + k + ')').test(fmt)) {
                fmt = fmt.replace(RegExp.$1,
                    RegExp.$1.length === 1 ? o[k] : ('00' + o[k])
                        .substr(('' + o[k]).length));
            }
        }
        return fmt;
    },

    /**
     * 秒转日期时间.
     * @param second
     */
    secondToDateTimeStr(second) {
        let date = new Date(second);
        return this.formatDate(date, 'yyyy-MM-dd hh:mm:ss');
    },

    /**
     * 获取当月第一天
     */
    getCurrentMonthFirst () {
        var date = new Date();
        date.setDate(1);
        return date;
    },

    /**
     * 获取当天
     */
    getNow () {
        return new Date();
    },

    getNowTimeStr() {
        return this.formatDate(this.getNow(), 'yyyy-MM-dd hh:mm:ss');
    },

    /**
     * 判断日期是否在今天之前，不含今天
     * @param {*} date
     */
    checkDateBeforeNow (date) {
        var fmt = 'yyyMMdd';
        var nowNum = parseInt(this.formatDate(new Date(), fmt));
        var dateNum = parseInt(this.formatDate(date, fmt));
        return dateNum < nowNum;
    },

    /**
     * 获取日期的星期数，返回中文
     * @param {*} dayStr 如2018-06-15
     * return 星期一
     */
    getDayChn (dateStr) {
        return '星期' + '天一二三四五六 '.charAt(new Date(dateStr).getDay());
    },
    /**
     * 将日期字符串转成Date,注意：只去日期字段，没有设置时间字段
     * @param {} dateString
     */
    parseDateFromStr (dateString) {
        if (dateString) {
            var arr1 = dateString.split(' ');
            var sdate = arr1[0].split('-');
            var date = new Date(sdate[0], sdate[1] - 1, sdate[2]);
            return date;
        }
    },
    /**
     * 判断是不是在两个时间段内
     * @param beginTime
     * @param endTime
     * @returns {boolean}
     */
    timeRange (beginTime, endTime) {
        let strB = beginTime.split(':');
        if (strB.length !== 2) {
            return false;
        }

        let strE = endTime.split(':');
        if (strE.length !== 2) {
            return false;
        }
        let b = new Date();
        let e = new Date();
        let n = new Date();
        b.setHours(strB[0]);
        b.setMinutes(strB[1]);
        e.setHours(strE[0]);
        e.setMinutes(strE[1]);
        return n.getTime() - b.getTime() > 0 && n.getTime() - e.getTime() < 0;
    },

    /**
     * 获取当前时间timestamp
     */
    currentTimestampSecond() {
        return Math.ceil((new Date()).getTime() / 1000)
    },
    /**
     * 获取两个时间戳的差值.
     * @param now {Date}
     * @param before {Date}
     * @returns {number}
     */
    secondsBetween(now, before) {
        return Math.ceil((now.getTime() - before.getTime()) / 1000)
    },
    /**
     * 获取两个时间戳的差值.
     * @param now {Date}
     * @param before {Date}
     * @returns {number}
     */
    minutesBetween(now, before) {
        return Math.ceil((now.getTime() - before.getTime()) / 1000 / 60)
    },
    /**
     * 获取两个时间戳的差值.
     * @param now {Date}
     * @param before {Date}
     * @returns {number}
     */
    hoursBetween(now, before) {
        return Math.ceil((now.getTime() - before.getTime()) / 1000 / 60 / 60)
    },
    /**
     * 获取两个时间戳的差值.
     * @param now {Date}
     * @param before {Date}
     * @returns {number}
     */
    daysBetween(now, before) {
        return Math.ceil((now.getTime() - before.getTime()) / 1000 / 60 / 60 / 24)
    },
    /**
     * 获取两个时间戳的差值.
     * @param now {Date}
     * @param before {Date}
     * @returns {number}
     */
    monthsBetween(now, before) {
        return Math.ceil((now.getTime() - before.getTime()) / 1000 / 60 / 60 / 24 / 30)
    },
    /**
     * 获取两个时间戳的差值.
     * @param now {Date}
     * @param before {Date}
     * @returns {number}
     */
    yearsBetween(now, before) {
        return Math.ceil((now.getTime() - before.getTime()) / 1000 / 60 / 60 / 24 / 365)
    },
};

export default TimeUtils
